草庐IT

Python NotImplemented 常量

全部标签

c++ - 多个文件中的常量定义

我正在阅读“C++入门加”。第9章讲了C++和C在处理const修饰符时的区别:“在C++(但不是C)中,const修饰符会稍微改变默认存储类。而全局变量默认具有外部链接,而const全局变量默认具有内部链接。...如果全局const声明与常规变量一样具有外部链接,这将是一个错误,因为您只能在一个文件中定义全局变量。也就是说,只有一个文件可以包含过程声明,其他文件必须使用extern关键字提供引用声明。”我尝试使用以下程序测试此声明:文件.h:usingnamespacestd;constchar*constant="Magic";file1.cpp#include#include"f

通过 NULL 指针访问 C++ 静态常量

这个问题在这里已经有了答案:c++accessstaticmembersusingnullpointer(5个回答)关闭7年前。classFoo{public:staticconstintkType=42;};voidFunc(){Foo*bar=NULL;intx=bar->kType;putc(x,stderr);}这是定义的行为吗?我通读了C++标准,但找不到任何有关访问这样的静态const值的信息……我检查了GCC4.2、Clang++和VisualStudio2010生成的程序集,但它们都没有执行NULL的取消引用指针,但我想确定一下。 最佳答案

C++如何将非常数列表传递给需要常量列表的函数

我有一个带有签名的函数voidFoo(list)我想通过它一个list我该怎么做?(请注意-列表不是恒定的,只有列表的成员) 最佳答案 你遇到的问题是,即使T*可以隐式转换为Tconst*,模板系统没有“意识到”这一点,所以whatever和whatever是完全不相关的类型,并且没有从一种到另一种的隐式转换。为了避免这个问题,我可能会完全避免传递一个集合。相反,我会让函数采用一对迭代器。一个list::iterator可以隐式转换为list::const_iterator.就此而言,我可能会将函数设为模板,因此它可以采用任意类型的

c++ - 我可以传递伪装成数组的常量指针吗?

voidfoo(constchar*s);相当于:voidfoo(constchars[]);是否有与以下两个类似的等价物?voidfoo(char*consts);voidfoo(constchar*consts); 最佳答案 在C++中,编译器会自动转换类型为T的N个元素的数组类型的函数参数(其中N可以是unknown)指向T的指针。在同一转换中,参数的顶级const限定符被删除:voidf(constintx);//=>declares:voidf(int)voidf(int*const);//=>declares:voidf

c++ - 常量引用和左值

这个问题在这里已经有了答案:Literalinitializationforconstreferences(3个回答)关闭8年前。我们不能写int&ref=40因为我们需要lvalue在右侧。但是我们可以写成constint&ref=40。为什么这可能?40是rvalue而不是lvalue我知道这是个异常(exception),但为什么呢? 最佳答案 正如Stroustrup所说:TheinitializerforaconstT&neednotbeanlvalueorevenoftypeT.Insuchcases:[1]First,

c++ - 如何表达转发引用的常量?

请考虑以下带有转发引用参数的模板函数接口(interface):templatevoidf(T&&t){...}在这种情况下,f要么采用左值引用,要么采用右值引用,具体取决于f的参数类型。如何表达f不修改其参数?以下幼稚的方法不起作用,因为它不再允许将左值引用传递给f:templatevoidf(constT&&t){...} 最佳答案 HowcanIexpressthatfdoesnotmodifyitsparameter?如果函数不修改其参数,则使用转发引用没有任何好处。当您想要将参数forward到某个其他函数上时,您可以使用

c++ - 不是 VS2017 中的编译时常量表达式

VS201715.1编译失败如下代码:templatestructData{};templatestructBase{staticconstexprintsize(){returns;}};templatestructDerived:Base//structDerived{Data::size()>data;};intmain(){Derivedc;}错误是:errorC2975:'data_size':invalidtemplateargumentfor'Data',expectedcompile-timeconstantexpressionnote:seedeclarationof

c++ - const 变量的值在常量表达式中是否可用,取决于变量类型

下面的代码没问题:constexprdoublesquare_cstxpr(doublex){returnx*x;}intmain(){constinttest=5;constexprdoubleresult=square_cstxpr((double)test);}但是,如果将test的类型从constint更改为constdouble,g++会给出以下错误:the'test'的值在常量表达式中不可用。在此处查看g++的代码和输出:http://coliru.stacked-crooked.com/a/2fe9b176c2b23798有人能解释一下这种行为吗?

c++ - 为什么这个表达式不是常量表达式?

这段代码中的表达式b应该是一个核心常量表达式intmain(){constexprinta=10;constint&b=a;constexprintc=b;//herereturn0;}因为标准说(8.20,第2段[expr.const]inn4700)Anexpressioneisacoreconstantexpressionunlesstheevaluationofewouldevaluateoneofthefollowingexpressions:...anlvalue-to-rvalueconversion(7.1)unlessitisappliedto...anon-vola

c++ - 定义编译时常量的最佳方法

在C++11中定义简单常量值的最佳方法是什么,这样就不会产生运行时损失?例如:(无效代码)//Notideal,notype,easytoputinwrongspotandgetweirderrors#defineVALUE123//Ok,butintegersonly,andisitint,long,uint64_torwhat?enum{Value=123};//Couldbeperfect,butdoesthevariabletakeupmemoryatruntime?constexprunsignedintValue=123;classMyClass{//Whataboutac